.TH std::optional::reset 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::optional::reset \- std::optional::reset

.SH Synopsis
   void reset() noexcept;  \fI(since C++17)\fP
                           (constexpr since C++20)

   If *this contains a value, destroy that value as if by value().T::~T(). Otherwise,
   there are no effects.

   *this does not contain a value after this call.

.SH Example


// Run this code

 #include <iostream>
 #include <optional>

 struct A
 {
     std::string s;
     A(std::string str) : s(std::move(str))  { std::cout << " constructed\\n"; }
     ~A() { std::cout << " destructed\\n"; }
     A(const A& o) : s(o.s) { std::cout << " copy constructed\\n"; }
     A(A&& o) : s(std::move(o.s)) { std::cout << " move constructed\\n"; }

     A& operator=(const A& other)
     {
         s = other.s;
         std::cout << " copy assigned\\n";
         return *this;
     }

     A& operator=(A&& other)
     {
         s = std::move(other.s);
         std::cout << " move assigned\\n";
         return *this;
     }
 };

 int main()
 {
     std::cout << "Create empty optional:\\n";
     std::optional<A> opt;

     std::cout << "Construct and assign value:\\n";
     opt = A("Lorem ipsum dolor sit amet, consectetur adipiscing elit nec.");

     std::cout << "Reset optional:\\n";
     opt.reset();
     std::cout << "End example\\n";
 }

.SH Output:

 Create empty optional:
 Construct and assign value:
  constructed
  move constructed
  destructed
 Reset optional:
  destructed
 End example

   Defect reports

   The following behavior-changing defect reports were applied retroactively to
   previously published C++ standards.

     DR    Applied to              Behavior as published               Correct behavior
   P2231R1 C++20      reset was not constexpr while non-trivial        made constexpr
                      destruction is allowed in constexpr in C++20

.SH See also

   operator= assigns contents
             \fI(public member function)\fP
